package com.zhiwen.design.proxy.jdkProxy;

import com.zhiwen.design.proxy.SellHouse;
import com.zhiwen.design.proxy.SellHouseImpl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * @Auther: wuzhiwen
 * @Date: 2018/12/3 13:08
 * @Description:
 */
public class BuyHouseByProxy {
    public static void main(String[] args) {
        SellHouse sellHouse = new SellHouseImpl();
        DynamicSellHouseProxy dynamicSellHouseProxy = new DynamicSellHouseProxy(sellHouse);
//        ClassLoader loader:指定当前目标对象使用的类加载器,获取加载器的方法是固定的
//        Class<?>[] interfaces:指定目标对象实现的接口的类型,使用泛型方式确认类型
//        InvocationHandler:指定动态处理器，执行目标对象的方法时,会触发事件处理器的方法
        SellHouse sellHouse1 = (SellHouse) Proxy.newProxyInstance(SellHouse.class.getClassLoader(), new Class[]{SellHouse.class}, dynamicSellHouseProxy);
        sellHouse1.sellHouse();

    }
}
